package Views.Compra;

import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.List;

import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JSeparator;
import javax.swing.JTextField;
import javax.swing.SwingConstants;

import Fisica.Ajuste.DAOAjuste;
import Fisica.Destino.DAODestino;
import Fisica.Compra.DAOCompra;
import Fisica.Compra.DAOPedidoCompra;
import Fisica.Movimiento.DAOMovimiento;
import Fisica.Retiro.DAORetiro;
import Fisica.Toner.DAOToner;
import Inteface.InterfaceGrilla;
import Inteface.InterfacePanel;
import Logica.Util;
import Modelo.Ajuste;
import Modelo.Destino;
import Modelo.Compra;
import Modelo.Movimiento;
import Modelo.Pedidocompra;
import Modelo.Retiro;
import Modelo.Toner;

public class PedidoCompraCampos extends JPanel implements InterfaceGrilla, InterfacePanel {
	private JTextField tfID;
	private JTextField tfCantidad;
	private JComboBox cbMarca, cbModelo, cbProveedor;
	private JTextField tfEfecto;
	private JTextField tfFecha;
	private JTextField tfRetiro;
	private JTextField tfAjuste;

	/**
	 * Create the panel.
	 */
	public PedidoCompraCampos(int id) {
		setLayout(null);
		this.setVisible(true);
		
		JLabel lblId = new JLabel("ID");
		lblId.setBounds(10, 47, 46, 14);
		add(lblId);
		
		tfID = new JTextField();
		tfID.setEditable(false);
		tfID.setBounds(70, 44, 53, 20);
		add(tfID);
		tfID.setColumns(10);
		
		JLabel lblMarca = new JLabel("Marca");
		lblMarca.setBounds(10, 195, 46, 14);
		add(lblMarca);
		
		JLabel lblModelo = new JLabel("Modelo");
		lblModelo.setBounds(10, 220, 46, 14);
		add(lblModelo);
		
		JLabel lblToner = new JLabel("TONER");
		lblToner.setFont(new Font("Tahoma", Font.BOLD, 11));
		lblToner.setBounds(10, 157, 130, 20);
		add(lblToner);
		
		JSeparator separator = new JSeparator();
		separator.setBounds(10, 182, 135, 2);
		add(separator);
		
		JLabel lblAjuste = new JLabel("AJUSTE");
		lblAjuste.setFont(new Font("Tahoma", Font.BOLD, 11));
		lblAjuste.setBounds(187, 157, 130, 20);
		add(lblAjuste);
		
		JSeparator separator_1 = new JSeparator();
		separator_1.setBounds(187, 182, 135, 2);
		add(separator_1);
		
		JLabel lblDetalle = new JLabel("Detalle");
		lblDetalle.setBounds(187, 195, 46, 14);
		add(lblDetalle);
		
		JLabel lblEfecto = new JLabel("Efecto");
		lblEfecto.setBounds(187, 220, 46, 14);
		add(lblEfecto);
		
		JLabel lblCompra = new JLabel("PEDIDO COMPRA");
		lblCompra.setFont(new Font("Tahoma", Font.BOLD, 11));
		lblCompra.setBounds(10, 9, 130, 20);
		add(lblCompra);
		
		JSeparator separator_2 = new JSeparator();
		separator_2.setBounds(10, 34, 135, 2);
		add(separator_2);
		
		JLabel lblCantidad = new JLabel("Cantidad");
		lblCantidad.setBounds(10, 75, 60, 14);
		add(lblCantidad);
		
		tfCantidad = new JTextField();
		tfCantidad.setColumns(10);
		tfCantidad.setBounds(70, 72, 86, 20);
		tfCantidad.setText("0");
		add(tfCantidad);
		
		cbMarca = new JComboBox();
		cbMarca.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				initModelos();
			}
		});
		cbMarca.setBounds(56, 192, 86, 20);
		add(cbMarca);
		
		cbModelo = new JComboBox();
		cbModelo.setBounds(56, 217, 86, 20);
		add(cbModelo);
		
		tfEfecto = new JTextField();
		tfEfecto.setText("SUMA");
		tfEfecto.setEditable(false);
		tfEfecto.setBounds(231, 217, 86, 20);
		add(tfEfecto);
		tfEfecto.setColumns(10);
		
		JLabel lblRetiro = new JLabel("PROVEEDOR");
		lblRetiro.setFont(new Font("Tahoma", Font.BOLD, 11));
		lblRetiro.setBounds(211, 9, 130, 20);
		add(lblRetiro);
		
		JLabel lblSucursal = new JLabel("Nombre");
		lblSucursal.setBounds(211, 50, 60, 14);
		add(lblSucursal);
		
		JSeparator separator_3 = new JSeparator();
		separator_3.setBounds(211, 34, 135, 2);
		add(separator_3);
		
		cbProveedor = new JComboBox();
		cbProveedor.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				
			}
		});
		cbProveedor.setBounds(271, 47, 168, 20);
		add(cbProveedor);
		
		
		JLabel lblFecha = new JLabel("Fecha");
		lblFecha.setBounds(211, 107, 46, 14);
		add(lblFecha);
		
		JButton btFecha = new JButton("...");
		btFecha.setBounds(386, 103, 53, 23);
		add(btFecha);
		
		tfFecha = new JTextField();
		tfFecha.setHorizontalAlignment(SwingConstants.CENTER);
		tfFecha.setBounds(271, 104, 105, 20);
		tfFecha.setText(Util.getFechaActual());
		add(tfFecha);
		tfFecha.setColumns(10);
		
		this.getFechaCalendario(btFecha, tfFecha);
		
		tfRetiro = new JTextField();
		tfRetiro.setEditable(false);
		tfRetiro.setBounds(271, 75, 168, 20);
		add(tfRetiro);
		tfRetiro.setColumns(10);
		
		tfAjuste = new JTextField();
		tfAjuste.setText("INGRESO");
		tfAjuste.setEditable(false);
		tfAjuste.setBounds(231, 192, 86, 20);
		add(tfAjuste);
		tfAjuste.setColumns(10);
		
		this.initMarcas();
		this.initModelos();
		
		this.init(id);
		this.initProveedores();
	}

	/*Llamador del seleccionar fecha en calendario*/
	public void getFechaCalendario(JButton boton, final JTextField textfield){
	 final PedidoCompraCampos f = this;
	 boton.addActionListener(new ActionListener() {
	         public void actionPerformed(ActionEvent ae) {
	                textfield.setText(new Logica.CalendarioPicker(f).setPickedDate());
	               }
	         });
	 }
	
	@Override
	public void guardar() {
		try {
			DAOToner dt = new DAOToner();
			DAOCompra dc = new DAOCompra();
//			DAOAjuste da = new DAOAjuste();
			DAORetiro dr = new DAORetiro();
			DAOPedidoCompra dpc = new DAOPedidoCompra();
			DAOMovimiento dm = new DAOMovimiento();
			
			Movimiento m = new Movimiento();
			Retiro r = new Retiro();
			r.setIdDestino(0); //destino stock general.
			
			Pedidocompra pc = new Pedidocompra();
			
			int id = -1;
			if(tfID.getText().length() > 0){
				Integer.parseInt(tfID.getText());
			}
				
			Compra c = (Compra) dc.getById(Integer.valueOf(id));
			
			String marca = "", modelo = "";
			if (cbMarca.getSelectedIndex() > 0)
				marca = cbMarca.getSelectedItem().toString();
			if (cbModelo.getSelectedIndex() > 0)
				modelo = cbModelo.getSelectedItem().toString();
			
			Toner t = (Toner) dt.getByMarcaModelo(marca, modelo);
						
			Ajuste a; 			
			String ajuste = "";
			
//			a = (Ajuste) da.getById(1);
			
			int cantidad = 0;
			if (tfCantidad.getText().length() > 0){
				cantidad = Integer.parseInt(tfCantidad.getText());								
			}
			
			
			c.setFecha(Util.getDate(tfFecha.getText()));
			m.setFecha(Util.getDate(tfFecha.getText())); //fecha
			
			if(cbProveedor.getSelectedIndex()> 0)
				c.setProveedor(cbProveedor.getSelectedItem().toString());
			else if(tfRetiro.getText().length()>0)
					c.setProveedor(tfRetiro.getText().toUpperCase());
				else
					c.setProveedor("");
			
			r.setNombre(c.getProveedor());
			
			dc.insert(c);  //INSERTO DATOS PROV Y FECHA
			
			pc.setCantidad(cantidad);
			m.setCantidad(cantidad);//cantidad
			
			pc.setIdCompra(c.getId());
			pc.setIdToner(t.getId());
			m.setIdToner(t.getId()); //idToner
			m.setIdAjuste(1); //id de compra o ingreso.
			dm.insert(m);  //INSERTO DATOS MOVIMIENTO.
			
			r.setIdMovimiento(m.getId());
			dr.insert(r); //INSERTO DATOS RETIRO/ENTREGA
			
			pc.setIdMovimiento(m.getId());
			dpc.insert(pc);  //INSERTO DATOS PEDIDO-COMPRA
			
			t.setStock(t.getStock() + (pc.getCantidad()));
			dt.stock(t);
			
//			d.setId(0); //al deposito principal
						
			this.cancelar();
			
		} catch (Exception e) {
			JOptionPane.showMessageDialog(this, "Error en la carga de datos", "Error",
			        JOptionPane.WARNING_MESSAGE);
			e.printStackTrace();
		}
		
		
	}

	@Override
	public void cancelar() {
		tfID.setText("");
		tfCantidad.setText("0");
		initMarcas();
		initModelos();		
		cbMarca.setSelectedItem("");	
		
		cbModelo.setSelectedItem("");
		cbProveedor.setSelectedItem("");
		
		this.initProveedores();
		tfRetiro.setText("");
		tfFecha.setText(Util.getFechaActual());
	}

	public Object primero() {
		DAOToner dt = new DAOToner();
		return (Compra) dt.getFirst();		
	}

	public Object ultimo() {
		DAOToner dt = new DAOToner();
		return (Compra) dt.getLast();
	}

	public Object anterior() {
		DAOToner dt = new DAOToner();
		if(tfID.getText().length()>0)
			return (Compra) dt.getPre(Integer.parseInt(tfID.getText()));
		else return primero();
	}

	public Object posterior() {
		DAOToner dt = new DAOToner();
		if(tfID.getText().length()>0)
			return (Compra) dt.getPost(Integer.parseInt(tfID.getText()));
		else return primero();
	}

	@Override
	public boolean grilla() {
		return false;
	}

	@Override
	public boolean campos() {
		return true;
	}

	@Override
	public int getPanel() {
		return 6;
	}

	@Override
	public void init(int id) {	
		
		if(id == -1){
			cancelar();
		}else{
			DAOCompra dc = new DAOCompra();
			DAOToner dt = new DAOToner();
			DAOAjuste da = new DAOAjuste();
			DAOPedidoCompra dpc = new DAOPedidoCompra();
			
			Pedidocompra pc = (Pedidocompra)dpc.getById(id);
			Compra c = (Compra)dc.getById(pc.getIdCompra());
			Toner t = (Toner)dt.getById(pc.getIdToner());
			
			
			tfID.setText(Integer.toString(c.getId()));
			tfCantidad.setText(Integer.toString(pc.getCantidad()));
			
			Ajuste a = (Ajuste)da.getById(1);
			tfAjuste.setText(a.getAjuste());
			tfEfecto.setText("Suma");
			
			cbMarca.setSelectedItem(t.getMarca());
			initModelos();
			cbModelo.setSelectedItem(t.getModelo());
			
//			initDetalleAjuste();
//			cbDetalle.setSelectedItem(a.getEfecto());
//			tfCodigo.setText(t.getCodigo());			
		}
	}

	@Override
	public int getRowSelected() {
		return -1;
	}
	
	
	//CARGA LISTA DE MARCAS 
    public void initProveedores(){
        cbProveedor.removeAllItems();
        List<Object>list = null;
        DAOCompra dt = new DAOCompra();
        Compra t;
        list = dt.listProveedores();
        cbProveedor.addItem("");  
        for(Object o: list) {
        	t = (Compra) o;
            cbProveedor.addItem(t.getProveedor()); 
           } 
        }
	
	//CARGA LISTA DE MARCAS 
    public void initMarcas(){
        cbMarca.removeAllItems();
        List<Object>list = null;
        DAOToner dt = new DAOToner();
        Toner t;
        list = dt.listMarcas();
        cbMarca.addItem("");  
        for(Object o: list) {
        	t = (Toner) o;
            cbMarca.addItem(t.getMarca()); 
           } 
        }
    
  //CARGA LISTA DE MODELOS 
    public void initModelos(){
        List<Object>list = null;
        String marca; 
        DAOToner dt = new DAOToner();
        Toner t;
        if (cbMarca.getSelectedIndex() < 0){
                marca = "";             
        }else {
                marca = cbMarca.getSelectedItem().toString(); 
                list = dt.listMarca(marca);
	            cbModelo.removeAllItems();
	            cbModelo.addItem("");  
	            for(Object o: list) {
	                t = (Toner)o;
	                cbModelo.addItem(t.getModelo()); 
               } 
        }           
        }

    public void nuevo() {		
		tfRetiro.setEditable(!tfRetiro.isEditable());			
	}
	
	public void finNuevo() {
		tfRetiro.setEditable(false);
			
	}

	@Override
	public int setprimero() {
		return -1;
	}

	@Override
	public int setultimo() {
		return -1;
	}

	@Override
	public int setanterior() {
		return -1;
	}

	@Override
	public int setposterior() {
		return -1;
	}
}
